#pragma once

#include <memory>
#include <string>
#include <vector>

#include <ros/builtin_message_traits.h>
#include <ros/message_operations.h>
#include <ros/serialization.h>
#include <ros/types.h>
#include <actionlib_msgs/GoalID.h>
#include <std_msgs/Header.h>

#include "ActDemoGoal.h"

namespace ros1_protobuf_msg_bridge {
    typedef boost::shared_ptr<ros1_protobuf_msg_bridge::ActDemoGoal> ActDemoGoalPtr;
    typedef boost::shared_ptr<ros1_protobuf_msg_bridge::ActDemoGoal const> ActDemoGoalConstPtr;

    template <class ContainerAllocator>
    struct ActDemoActionGoal_ {
        typedef ActDemoActionGoal_<ContainerAllocator> Type;

        ActDemoActionGoal_() : header(), goal_id(), goal() {
        }
        ActDemoActionGoal_(const ContainerAllocator &_alloc) : header(_alloc), goal_id(_alloc), goal(_alloc) {
            (void)_alloc;
        }

        typedef ::std_msgs::Header_<ContainerAllocator> _header_type;
        _header_type header;

        typedef ::actionlib_msgs::GoalID_<ContainerAllocator> _goal_id_type;
        _goal_id_type goal_id;

        typedef ros1_protobuf_msg_bridge::ActDemoGoal _goal_type;
        _goal_type goal;

        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>> Ptr;
        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> const> ConstPtr;
    }; // struct ActDemoActionGoal_

    typedef ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<std::allocator<void>> ActDemoActionGoal;

    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionGoal> ActDemoActionGoalPtr;
    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionGoal const> ActDemoActionGoalConstPtr;

    template <typename ContainerAllocator>
    std::ostream &operator<<(std::ostream &s, const ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> &v) {
        ros::message_operations::Printer<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>>::stream(s, "", v);
        return s;
    }
} // namespace ros1_protobuf_msg_bridge

namespace ros { namespace message_traits {
    template <class ContainerAllocator>
    struct MD5Sum<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>> {
        static const char *value() {
            return "e87b7f16f6a176880522fc705609ebdc";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> &) {
            return value();
        }
    };

    template <class ContainerAllocator>
    struct DataType<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>> {
        static const char *value() {
            return "ros1_protobuf_msg_bridge/ActDemoActionGoal";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> &) {
            return value();
        }
    };

    template <class ContainerAllocator>
    struct Definition<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>> {
        static const char *value() {
            return "ros1_protobuf_msg_bridge/ActDemoActionGoal";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> &) {
            return value();
        }
    };
}} // namespace ros::message_traits

namespace ros { namespace serialization {
    template <class ContainerAllocator>
    struct Serializer<::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator>> {
        template <typename Stream, typename T>
        inline static void allInOne(Stream &stream, T m) {
            stream.next(m.header);
            stream.next(m.goal_id);
            stream.next(m.goal);
        }

        ROS_DECLARE_ALLINONE_SERIALIZER
    }; // struct ActDemoActionGoal_
}} // namespace ros::serialization